package com.imti.notificationdemo;

import android.annotation.SuppressLint;
import android.app.Notification;
import android.app.Notification.BigPictureStyle;
import android.app.Notification.BigTextStyle;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Icon;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
import androidx.core.app.TaskStackBuilder;

public class MainActivity extends AppCompatActivity
{

    private static final String NOTIFICATION_CHANNEL = "测试信道";

    private static final int REQUEST_CODE_NOTIFY = 0xf1;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
    }

    private void initView()
    {
        Button btnSendNotify = findViewById(R.id.btn_send_notification);
        Button btnSendNow = findViewById(R.id.btn_send_now_notification);

        btnSendNow.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                sendNormalNotify();
            }
        });

        btnSendNotify.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                sendOriginalNotify();
            }
        });
    }

    //传统方式
    private void sendOriginalNotify()
    {
        NotificationManager nm =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        Notification notification =
            new Notification.Builder(this)
                .setContentTitle("传统方式通知标题")
                .setContentText("传统方式通知内容")
                .setSmallIcon(R.mipmap.ic_launcher).build();

        nm.notify(1, notification);
    }

    private void sendNormalNotify()
    {
        NotificationManager nm = getSystemService(NotificationManager.class);
        //兼容性库创建NotificationManager
//        NotificationManagerCompat nmc = NotificationManagerCompat.from(this);

        //1.构建信道
        //参数1：信道ID，全局唯一，字符串
        //参数2：信道名称，在设置中可见
        //参数3：通知的重要级别
        NotificationChannel channel = new NotificationChannel(NOTIFICATION_CHANNEL,
            "测试信道", NotificationManager.IMPORTANCE_HIGH);

        //将信道注册到系统通知服务中
        nm.createNotificationChannel(channel);
        //兼容性库创建信道
//        nmc.createNotificationChannel(channel);

        Intent intent = new Intent(this, NotifyActivity.class);
        //参数1：Context
        //参数2：requestCode
        //参数3：跳转到目标Activity的Intent
        //参数4：点击后对通知的后续操作
        //PendingIntent.FLAG_CANCEL_CURRENT 点击通知跳转后销毁调通知
        //PendingIntent.FLAG_UPDATE_CURRENT 通知不销毁，实时更新通知内容，如下载
//        PendingIntent pi = PendingIntent.getActivity(
//            this, REQUEST_CODE_NOTIFY, intent,
//            PendingIntent.FLAG_CANCEL_CURRENT);
        //构造任务栈构造器工具
        TaskStackBuilder tsb = TaskStackBuilder.create(this);
        //添加Intent
        //注：目标Activity必须在AndroidManife.xml中的<activity>中
        //设置android:parentActivityName属性
        tsb.addNextIntentWithParentStack(intent);

        //通过TaskStackBuilder生成出PendingIntent对象，
        //交由NotificationBuilder构造通知对象
        PendingIntent pi =
            tsb.getPendingIntent(REQUEST_CODE_NOTIFY,
                PendingIntent.FLAG_CANCEL_CURRENT);

        //构造通知体对象
        Notification notify =
            //兼容性库创建通知
            //new NotificationCompat.Builder(this,NOTIFICATION_CHANNEL)
            new Notification.Builder(this, NOTIFICATION_CHANNEL)
                .setContentTitle("信道标题")
                .setContentText("信道内容")
                //设置通知时间
                .setWhen(System.currentTimeMillis())
                //是否显示时间
                .setShowWhen(true)
                //设置大图标
                .setLargeIcon(Icon.createWithResource(this,
                    R.mipmap.ic_launcher))
                //设置大图
//                .setStyle(new Notification.BigPictureStyle()
//                              .bigPicture(BitmapFactory.decodeResource(
//                                  getResources(), R.mipmap.panda)))
                .setStyle(new BigTextStyle().bigText(
                    "大段文字大段文字大段文字大段文字大段文字大段文字大段文字大段文字大段文字大段文字大段文字大段文字大段文字大段文字大段文字大段文字大段文字大段文字大段文字大段文字大段文字大段文字大段文字大段文字大段文字大段文字大段文字大段文字大段文字大段文字大段文字大段文字大段文字大段文字大段文字大段文字大段文字大段文字大段文字"))
                //设置点击跳转后自动销毁通知
                .setAutoCancel(true)
                //设置是否常驻通知栏（不可销毁），默认为false
                .setOngoing(false)
                .setSmallIcon(R.mipmap.ic_launcher)
                //添加点击后续操作
                .setContentIntent(pi)
                .build();

        //发送通知
        //参数1：id的值在每次发送通知时均相同，则通知会覆盖 (QQ)
        //若每次消息的id值不同，则对应通知栏创建新的通知对象 (微信)
        nm.notify(1, notify);
        //兼容性库发送通知
//        nmc.notify(1, notify);
    }
}